#ifndef __Pro_Hmi_Drive_H
#define __Pro_Hmi_Drive_H
#include "sys.h"
#include "User.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"
#include "rtc.h"
#include "iwdg.h"
#include "rng.h"
#include "can.h"
#include "adc.h"
#include "24cxx.h"
#include "spi.h"
#include "w25qxx.h"
#include "sram.h"
#include "stmflash.h"
#include "HC595.h"
#include "Motion.h"
#include "zfy.h"
void Pro_Hmi_Drive_Init(void); // 初始化
void Pro_boot_Drive(void);
void DWIN_Drive(void);
void Date_Set_Dwin(u8 year, u8 mon, u8 day, u8 Hour, u8 Min, u8 Sec);
void Set_Postion(u8 mode, u16 var_SP, u16 x, u16 y);
void Draw_Rectang(u16 Vp, u16 x1, u16 y1, u16 x2, u16 y2, u16 color);
void Draw_Line_to_curve(u16 Vp, u16 *x, u16 *y, u8 point, u16 color);
void Draw_Curve(u8 channel, u16 input);
void Pic_Copy(u16 Vp, u8 Num_Page, u16 x1, u16 y1, u16 x2, u16 y2, u16 x_L, u16 y_L);
u8 logo(u8 P_start, u8 P_end, u8 P_main, u8 JG_cyc);
u8 logo_FC_CTRL(u8 P_start, u8 P_end, u8 P_main, u8 JG_cyc);
void Draw_circle(u16 Vp, u16 x, u16 y, u16 rad, u16 start, u16 end, u16 color);
void Draw_Filling(u16 Vp, u16 x, u16 y, u16 color);
void Touch_Setting(u8 add, u8 Value);
void key_add_sub(u8 key_up, u8 key_down, u16 *value, u16 *m1);
void Reset_AI_Type(void);
typedef struct
{
	u8 Temp_Cpu;	  // 显示器温度 单位：℃
	u16 Battery_V;	  // 系统电压 单位：0.1v
	u8 Light;		  // 显示屏感光度(0-100)
	u8 Bright_Adj;	  // 显示屏亮度调节(0-64,设置成100为自动调节亮度)
	u8 Buzzer;		  // 蜂鸣器控制 1:发出声音
	u8 Backlight;	  // 按键背光控制
	u16 Var_Map[200]; // 与前面板关联变量映射
	u16 EEPROM[200];  // 显示器参数存储,eeprom方式
	u16 FeEL[300];	  // 显示器参数存储,铁电存储
	u8 Page_Go;		  // 翻页控制
	u8 Active;		  // 软件是否注册
	u8 Get_time[3];	  // 获取当前时间 时-分-秒
	u8 Get_date[3];	  // 获取当前时间 年-月-日
	u16 rng;		  // 随机数 0-65535
			 //==ECU==
	struct
	{
		u8 Type; // 0:DI 1:PI
		u8 DI;
		u16 PI;
	} PIN_14, PIN_15, PIN_18, PIN_19;
	//
	struct
	{
		u8 DI;
		u16 AI;
	} PIN_8, PIN_9, PIN_16, PIN_17;
	//
	struct
	{
		u8 Type; // 0:05-V 1:4-20mA 2:DI+ 3:DI-
		u8 DI;
		u16 AI;
	} PIN_3, PIN_4, PIN_5, PIN_6, PIN_7;
	//
	struct
	{
		u8 Type; // 0:DO 1:PWM 2:DI
		u8 DI, DO;
		u16 PWM;
	} PIN_12, PIN_13, PIN_10, PIN_11, PIN_25, PIN_26, PIN_2, PIN_29, PIN_38, PIN_39;
	struct
	{
		u16 Par_PI;
	} PWM_12_13_10_11_Set_PI, PWM_25_26_Set_PI, PWM_2_29_38_39_Set_PI;
	//
	struct
	{
		u8 Type; // 0:DO 1:DI 2:FB
		u16 FB_CAN;
		u8 DO;
		u8 DI;
	} PIN_23, PIN_24, PIN_30;
	//
	struct
	{
		u8 Type; // 0:DO 1:DI 2:FB 3:AO(0-5V)
		u16 FB_CAN;
		u16 AO;
		u8 DO;
		u8 DI;
	} PIN_31;
	//
	u16 Volt_Sys; // 系统电压
} Drive;
extern Drive ECU;
typedef struct
{
	u8 ID[28];
	u8 DATE[6];	   // 年-月-日 时-分-秒
	u8 type;	   // 垃圾类别
	u16 Weight_tt; // 重量 0.01kg
} data_eeprom;
extern data_eeprom data_eeprom_W, data_eeprom_R;
// 系统参数
typedef struct
{
	struct
	{
		struct
		{
			u32 BaudRate_9600;
			u32 BaudRate_19200;
			u32 BaudRate_57600;
			u32 BaudRate_115200;
		} BaudRate;
		struct
		{
			u16 WordLength_8b;
			u16 WordLength_9b;
		} USART_WordLength;
		struct
		{
			u16 Parity_No;
			u16 Parity_Even;
			u16 Parity_Odd;
		} Parity;
		struct
		{
			u16 StopBits_1;
			u16 StopBits_0_5;
			u16 StopBits_2;
			u16 StopBits_1_5;
		} USART_StopBits;
	} usart_Congig;
} Sys_Cfg;
extern Sys_Cfg Sys_Config;
// 串口参数
typedef struct
{
	uint32_t USART_BaudRate;
	uint16_t USART_WordLength;
	uint16_t USART_StopBits;
	uint16_t USART_Parity;
} G_USART_InitTypeDef;
// SDO参数标定
typedef struct
{
	u8 read;		  // 读操作
	u8 write;		  // 写操作
	u8 device_id[50]; // 设备编号
	u8 mw_id[50];	  // 存储编号
	u16 mw_value[50]; // 存储值
	u8 read_suc;	  // 读取成功
	u8 write_suc;	  // 写操作成功
	u8 Err_op_delay;  // 读写操作超时故障
} Op_SDO;
extern Op_SDO SDO;
typedef struct
{
	u8 New_date_In;	   // 新数据标识位
	u8 Rec_data_In[8]; // 接收的新数据
	//
	u8 Enable_Tx_Out;  // 数据发送使能
	u8 ID_Tx_Out;	   // 标定控制器ID
	u8 Tx_data_Out[8]; // 发送的数据
} SDO_PORT;
extern SDO_PORT SDO_port;
#endif
